﻿Imports System.Data
Imports System.Data.OleDb
Imports geraLaudosAutomatico.conexao
Imports System.Text

Public Class registroDAO

    Dim sql As New StringBuilder
    Dim i As Integer
    Dim registro As New registroVO
    Private ds As New DataSet

    Public Function getRegistro(ByVal NUM_REGISTRO As Integer, ByVal ano As Integer) As registroVO

        Dim objConn As New conexao
        registro = New registroVO
        sql.Clear()
        'sql.Append("SELECT *FROM municipios INNER JOIN (tipo_pericia INNER JOIN (secao INNER JOIN ((departamento INNER JOIN regional ON departamento.id_departamento = regional.id_departamento) INNER JOIN (natureza INNER JOIN (destino INNER JOIN (autoridade INNER JOIN (usuario INNER JOIN registro ON (usuario.id_usuario = registro.id_usuario) AND (usuario.id_usuario = registro.responsavel_registro)) ON autoridade.id_autoridade = registro.id_autoridade) ON destino.id_destino = registro.id_destino) ON natureza.id_natureza = registro.id_natureza) ON regional.id_regional = destino.id_regional) ON (secao.id_secao = usuario.id_secao) AND (secao.id_secao = autoridade.id_secao)) ON tipo_pericia.id_tipo = natureza.id_tipo) ON municipios.id_municipio = registro.id_municipio")
        'sql.Append(" WHERE NUM_REGISTRO=@NUM_REGISTRO AND YEAR(DATA_REGISTRO)=@ANO")

        sql.Append("SELECT *FROM usuario INNER JOIN (natureza INNER JOIN ((municipios INNER JOIN (destino INNER JOIN municipios_destino ON destino.id_destino = municipios_destino.id_destino) ON municipios.id_municipio = municipios_destino.id_municipio) INNER JOIN (autoridade INNER JOIN registro ON autoridade.id_autoridade = registro.id_autoridade) ON (municipios.id_municipio = registro.id_municipio) AND (destino.id_destino = registro.id_destino)) ON natureza.id_natureza = registro.id_natureza) ON usuario.id_usuario = registro.id_usuario where NUM_REGISTRO=@NUM_REGISTRO AND YEAR(DATA_REGISTRO)=@ANO")



        Dim oReader As OleDbDataReader

        Try
            Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)
            oComando.Parameters.AddWithValue("@NUM_REGISTRO", NUM_REGISTRO)
            oComando.Parameters.AddWithValue("@ANO", ano)
            oReader = oComando.ExecuteReader

            If oReader.HasRows Then

                While oReader.Read

                    If (Not IsDBNull(oReader("ID_REGISTRO"))) Then registro.ID_REGISTRO = oReader("ID_REGISTRO")
                    If (Not IsDBNull(oReader("NUM_REGISTRO"))) Then registro.NUM_REGISTRO = oReader("NUM_REGISTRO")
                    If (Not IsDBNull(oReader("DATA_REGISTRO"))) Then registro.DATA_REGISTRO = oReader("DATA_REGISTRO")
                    If (Not IsDBNull(oReader("REGISTRO.ID_AUTORIDADE"))) Then registro.AUTORIDADE = New autoridadeVO With {.ID_AUTORIDADE = oReader("AUTORIDADE.ID_AUTORIDADE"), .NOME_AUTORIDADE = oReader("NOME_AUTORIDADE")}
                    If (Not IsDBNull(oReader("REQUISICAO"))) Then registro.REQUISICAO = oReader("REQUISICAO")
                    If (Not IsDBNull(oReader("DATA_ACIONAMENTO"))) Then registro.DATA_ACIONAMENTO = oReader("DATA_ACIONAMENTO")
                    If (Not IsDBNull(oReader("NATUREZA.ID_NATUREZA"))) Then registro.NATUREZA = New naturezaVO With {.ID_NATUREZA = oReader("NATUREZA.ID_NATUREZA"), .DESC_NATUREZA = oReader("DESC_NATUREZA"), .DENOMINACAO_OFICIAL = oReader("DENOMINACAO_OFICIAL")}
                    If (Not IsDBNull(oReader("ENDERECO"))) Then registro.ENDERECO = oReader("ENDERECO")
                    If (Not IsDBNull(oReader("INVESTIGADO"))) Then registro.INVESTIGADO = oReader("INVESTIGADO")
                    If (Not IsDBNull(oReader("VITIMA"))) Then registro.VITIMA = oReader("VITIMA")
                    If (Not IsDBNull(oReader("PROVAS"))) Then registro.PROVAS = oReader("PROVAS")
                    If (Not IsDBNull(oReader("OBSERVACAO"))) Then registro.OBSERVACAO = oReader("OBSERVACAO")
                    If (Not IsDBNull(oReader("MUNICIPIOS.ID_MUNICIPIO"))) Then registro.MUNICIPIO = New municipioVO With {.ID_MUNICIPIO = oReader("MUNICIPIOS.ID_MUNICIPIO"), .DESC_MUNICIPIO = oReader("DESC_MUNICIPIO")}
                    If (Not IsDBNull(oReader("REGISTRO.DESLOCAMENTO"))) Then registro.DESLOCAMENTO = (oReader("REGISTRO.DESLOCAMENTO"))
                    If (Not IsDBNull(oReader("RESPONSAVEL_REGISTRO"))) Then registro.RESPONSAVEL_REGISTRO = New usuarioVO With {.ID_USUARIO = oReader("USUARIO.ID_USUARIO")}
                    If (Not IsDBNull(oReader("REGISTRO.ID_USUARIO"))) Then registro.USUARIO = New usuarioVO With {.ID_USUARIO = oReader("REGISTRO.ID_USUARIO"), .NOME = oReader("NOME")}
                    If (Not IsDBNull(oReader("USUARIO_DESIGNADO"))) Then registro.USUARIO_DESIGNADO = (oReader("USUARIO_DESIGNADO"))
                    If (Not IsDBNull(oReader("DATA_REQUISICAO_LAUDO"))) Then registro.DATA_REQUISICAO_LAUDO = oReader("DATA_REQUISICAO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_PRAZO_LAUDO"))) Then registro.DATA_PRAZO_LAUDO = oReader("DATA_PRAZO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_CONCLUSAO_LAUDO"))) Then registro.DATA_CONCLUSAO_LAUDO = oReader("DATA_CONCLUSAO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_ENTREGA_LAUDO"))) Then registro.DATA_ENTREGA_LAUDO = oReader("DATA_ENTREGA_LAUDO")
                    'If (Not IsDBNull(oReader("ID_RELATORIO_RECIBO"))) Then registro.RELATORIO_RECIBO = New relatorio_reciboVO
                    If (Not IsDBNull(oReader("CAMPO_ENTREGA_LAUDO"))) Then registro.CAMPO_ENTREGA_LAUDO = oReader("CAMPO_ENTREGA_LAUDO")
                    If (Not IsDBNull(oReader("DATA_ALTERACAO"))) Then registro.DATA_ALTERACAO = oReader("DATA_ALTERACAO")
                    If (Not IsDBNull(oReader("MATERIALRECIBO"))) Then registro.MATERIAL_RECIBO = oReader("MATERIALRECIBO")
                    If (Not IsDBNull(oReader("GEROULAUDO"))) Then registro.GEROULAUDO = oReader("GEROULAUDO")
                    If (Not IsDBNull(oReader("NOME_DIRETORIO"))) Then registro.NOME_DIRETORIO = oReader("NOME_DIRETORIO")
                    If (Not IsDBNull(oReader("REGISTRO.DATA_CRIACAO"))) Then registro.DATA_CRIACAO = oReader("REGISTRO.DATA_CRIACAO")
                    Exit While
                End While
            End If
        Catch ex As Exception
            Throw ex
        Finally
            objConn.fechaConexao()
        End Try
        Return registro
    End Function

    Public Function getRegistroSimplificado(ByVal NUM_REGISTRO As Integer, ByVal ano As Integer, Optional ByVal id_natureza As Integer = Nothing) As registroVO

        Dim objConn As New conexao
        registro = New registroVO
        sql.Clear()

        If id_natureza > 0 Then
            sql.Append("SELECT *FROM tipo_pericia INNER JOIN (natureza INNER JOIN registro ON natureza.id_natureza = registro.id_natureza) ON tipo_pericia.id_tipo = natureza.id_tipo WHERE NUM_REGISTRO=@NUM_REGISTRO AND YEAR(DATA_REGISTRO)=@ANO and REGISTRO.ID_NATUREZA=@ID_NATUREZA")
        Else
            sql.Append("SELECT *FROM tipo_pericia INNER JOIN (natureza INNER JOIN registro ON natureza.id_natureza = registro.id_natureza) ON tipo_pericia.id_tipo = natureza.id_tipo WHERE NUM_REGISTRO=@NUM_REGISTRO AND YEAR(DATA_REGISTRO)=@ANO")
        End If

        Dim oReader As OleDbDataReader
        Try
            Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)
            oComando.Parameters.AddWithValue("@NUM_REGISTRO", NUM_REGISTRO)
            oComando.Parameters.AddWithValue("@ANO", ano)

            If (id_natureza) > 0 Then
                oComando.Parameters.AddWithValue("@ID_NATUREZA", id_natureza)
            End If

            oReader = oComando.ExecuteReader

            If oReader.HasRows Then

                While oReader.Read

                    If (Not IsDBNull(oReader("ID_REGISTRO"))) Then registro.ID_REGISTRO = oReader("ID_REGISTRO")
                    If (Not IsDBNull(oReader("NUM_REGISTRO"))) Then registro.NUM_REGISTRO = oReader("NUM_REGISTRO")
                    If (Not IsDBNull(oReader("DATA_REGISTRO"))) Then registro.DATA_REGISTRO = oReader("DATA_REGISTRO")
                    If (Not IsDBNull(oReader("ID_AUTORIDADE"))) Then registro.AUTORIDADE = New autoridadeVO With {.ID_AUTORIDADE = oReader("ID_AUTORIDADE")}
                    If (Not IsDBNull(oReader("REQUISICAO"))) Then registro.REQUISICAO = oReader("REQUISICAO")
                    If (Not IsDBNull(oReader("DATA_ACIONAMENTO"))) Then registro.DATA_ACIONAMENTO = oReader("DATA_ACIONAMENTO")
                    If (Not IsDBNull(oReader("NATUREZA.ID_NATUREZA"))) Then registro.NATUREZA = New naturezaVO With {.ID_NATUREZA = oReader("NATUREZA.ID_NATUREZA"), .DESC_NATUREZA = oReader("DESC_NATUREZA"), .DENOMINACAO_OFICIAL = oReader("DENOMINACAO_OFICIAL"), .TIPO_PERICIA = New tipo_periciaVO With {.ID_TIPO = oReader("TIPO_PERICIA.ID_TIPO"), .DESC_TIPO = oReader("DESC_TIPO"), .STATUS = oReader("TIPO_PERICIA.STATUS"), .PRAZO = oReader("PRAZO")}, .STATUS = oReader("NATUREZA.STATUS"), .PONTOS_ATENDIMENTO = oReader("PONTOS_ATENDIMENTO"), .PONTOS_LAUDO = oReader("PONTOS_LAUDO"), .DESLOCAMENTO = oReader("NATUREZA.DESLOCAMENTO")}
                    If (Not IsDBNull(oReader("ENDERECO"))) Then registro.ENDERECO = oReader("ENDERECO")
                    If (Not IsDBNull(oReader("INVESTIGADO"))) Then registro.INVESTIGADO = oReader("INVESTIGADO")
                    If (Not IsDBNull(oReader("VITIMA"))) Then registro.VITIMA = oReader("VITIMA")
                    If (Not IsDBNull(oReader("PROVAS"))) Then registro.PROVAS = oReader("PROVAS")
                    If (Not IsDBNull(oReader("OBSERVACAO"))) Then registro.OBSERVACAO = oReader("OBSERVACAO")
                    If (Not IsDBNull(oReader("ID_DESTINO"))) Then registro.DESTINO = New destinoVO With {.ID_DESTINO = oReader("ID_DESTINO")}
                    If (Not IsDBNull(oReader("ID_MUNICIPIO"))) Then registro.MUNICIPIO = New municipioVO With {.ID_MUNICIPIO = oReader("ID_MUNICIPIO")}
                    If (Not IsDBNull(oReader("REGISTRO.DESLOCAMENTO"))) Then registro.DESLOCAMENTO = (oReader("REGISTRO.DESLOCAMENTO"))
                    If (Not IsDBNull(oReader("RESPONSAVEL_REGISTRO"))) Then registro.RESPONSAVEL_REGISTRO = New usuarioVO With {.ID_USUARIO = oReader("ID_USUARIO")}
                    If (Not IsDBNull(oReader("ID_USUARIO"))) Then registro.USUARIO = New usuarioVO With {.ID_USUARIO = oReader("ID_USUARIO")}
                    If (Not IsDBNull(oReader("USUARIO_DESIGNADO"))) Then registro.USUARIO_DESIGNADO = (oReader("USUARIO_DESIGNADO"))
                    If (Not IsDBNull(oReader("DATA_REQUISICAO_LAUDO"))) Then registro.DATA_REQUISICAO_LAUDO = oReader("DATA_REQUISICAO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_PRAZO_LAUDO"))) Then registro.DATA_PRAZO_LAUDO = oReader("DATA_PRAZO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_CONCLUSAO_LAUDO"))) Then registro.DATA_CONCLUSAO_LAUDO = oReader("DATA_CONCLUSAO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_ENTREGA_LAUDO"))) Then registro.DATA_ENTREGA_LAUDO = oReader("DATA_ENTREGA_LAUDO")
                    If (Not IsDBNull(oReader("ID_RELATORIO_RECIBO"))) Then registro.RELATORIO_RECIBO = New relatorio_reciboVO
                    If (Not IsDBNull(oReader("CAMPO_ENTREGA_LAUDO"))) Then registro.CAMPO_ENTREGA_LAUDO = oReader("CAMPO_ENTREGA_LAUDO")
                    If (Not IsDBNull(oReader("DATA_ALTERACAO"))) Then registro.DATA_ALTERACAO = oReader("DATA_ALTERACAO")
                    If (Not IsDBNull(oReader("MATERIALRECIBO"))) Then registro.MATERIAL_RECIBO = oReader("MATERIALRECIBO")
                    If (Not IsDBNull(oReader("GEROULAUDO"))) Then registro.GEROULAUDO = oReader("GEROULAUDO")
                    If (Not IsDBNull(oReader("NOME_DIRETORIO"))) Then registro.NOME_DIRETORIO = oReader("NOME_DIRETORIO")
                    If (Not IsDBNull(oReader("DATA_CRIACAO"))) Then registro.DATA_CRIACAO = oReader("DATA_CRIACAO")
                    If (Not IsDBNull(oReader("ANULADO"))) Then registro.ANULADO = oReader("ANULADO")
                    If (Not IsDBNull(oReader("ID_RELATORIO_PA"))) Then registro.ID_RELATORIO_PA = oReader("ID_RELATORIO_PA")
                    If (Not IsDBNull(oReader("REFERENCIA"))) Then registro.REFERENCIA = oReader("REFERENCIA")
                    Exit While
                End While
            End If
        Catch ex As Exception
            Throw ex
        Finally
            objConn.fechaConexao()
        End Try
        Return registro
    End Function

    Public Function getRegistroSimplificado(ByVal ID_REGISTRO As Integer) As registroVO

        Dim objConn As New conexao
        registro = New registroVO
        sql.Clear()
        sql.Append("SELECT *FROM tipo_pericia INNER JOIN (natureza INNER JOIN registro ON natureza.id_natureza = registro.id_natureza) ON tipo_pericia.id_tipo = natureza.id_tipo WHERE ID_REGISTRO=@ID_REGISTRO ")

        Dim oReader As OleDbDataReader

        Try
            Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)
            oComando.Parameters.AddWithValue("@ID_REGISTRO", ID_REGISTRO)
            oReader = oComando.ExecuteReader

            If oReader.HasRows Then

                While oReader.Read

                    If (Not IsDBNull(oReader("ID_REGISTRO"))) Then registro.ID_REGISTRO = oReader("ID_REGISTRO")
                    If (Not IsDBNull(oReader("NUM_REGISTRO"))) Then registro.NUM_REGISTRO = oReader("NUM_REGISTRO")
                    If (Not IsDBNull(oReader("DATA_REGISTRO"))) Then registro.DATA_REGISTRO = oReader("DATA_REGISTRO")
                    If (Not IsDBNull(oReader("ID_AUTORIDADE"))) Then registro.AUTORIDADE = New autoridadeVO With {.ID_AUTORIDADE = oReader("ID_AUTORIDADE")}
                    If (Not IsDBNull(oReader("REQUISICAO"))) Then registro.REQUISICAO = oReader("REQUISICAO")
                    If (Not IsDBNull(oReader("NATUREZA.ID_NATUREZA"))) Then registro.NATUREZA = New naturezaVO With {.ID_NATUREZA = oReader("NATUREZA.ID_NATUREZA"), .DESC_NATUREZA = oReader("DESC_NATUREZA"), .DENOMINACAO_OFICIAL = oReader("DENOMINACAO_OFICIAL"), .TIPO_PERICIA = New tipo_periciaVO With {.ID_TIPO = oReader("TIPO_PERICIA.ID_TIPO"), .DESC_TIPO = oReader("DESC_TIPO"), .STATUS = oReader("TIPO_PERICIA.STATUS"), .PRAZO = oReader("PRAZO")}, .STATUS = oReader("NATUREZA.STATUS"), .PONTOS_ATENDIMENTO = oReader("PONTOS_ATENDIMENTO"), .PONTOS_LAUDO = oReader("PONTOS_LAUDO"), .DESLOCAMENTO = oReader("NATUREZA.DESLOCAMENTO")}
                    If (Not IsDBNull(oReader("ENDERECO"))) Then registro.ENDERECO = oReader("ENDERECO")
                    If (Not IsDBNull(oReader("INVESTIGADO"))) Then registro.INVESTIGADO = oReader("INVESTIGADO")
                    If (Not IsDBNull(oReader("VITIMA"))) Then registro.VITIMA = oReader("VITIMA")
                    If (Not IsDBNull(oReader("PROVAS"))) Then registro.PROVAS = oReader("PROVAS")
                    If (Not IsDBNull(oReader("OBSERVACAO"))) Then registro.OBSERVACAO = oReader("OBSERVACAO")
                    If (Not IsDBNull(oReader("ID_DESTINO"))) Then registro.DESTINO = New destinoVO With {.ID_DESTINO = oReader("ID_DESTINO")}
                    If (Not IsDBNull(oReader("ID_MUNICIPIO"))) Then registro.MUNICIPIO = New municipioVO With {.ID_MUNICIPIO = oReader("ID_MUNICIPIO")}
                    If (Not IsDBNull(oReader("REGISTRO.DESLOCAMENTO"))) Then registro.DESLOCAMENTO = (oReader("REGISTRO.DESLOCAMENTO"))
                    If (Not IsDBNull(oReader("RESPONSAVEL_REGISTRO"))) Then registro.RESPONSAVEL_REGISTRO = New usuarioVO With {.ID_USUARIO = oReader("ID_USUARIO")}
                    If (Not IsDBNull(oReader("ID_USUARIO"))) Then registro.USUARIO = New usuarioVO With {.ID_USUARIO = oReader("ID_USUARIO")}
                    If (Not IsDBNull(oReader("USUARIO_DESIGNADO"))) Then registro.USUARIO_DESIGNADO = (oReader("USUARIO_DESIGNADO"))
                    If (Not IsDBNull(oReader("DATA_REQUISICAO_LAUDO"))) Then registro.DATA_REQUISICAO_LAUDO = oReader("DATA_REQUISICAO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_PRAZO_LAUDO"))) Then registro.DATA_PRAZO_LAUDO = oReader("DATA_PRAZO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_CONCLUSAO_LAUDO"))) Then registro.DATA_CONCLUSAO_LAUDO = oReader("DATA_CONCLUSAO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_ENTREGA_LAUDO"))) Then registro.DATA_ENTREGA_LAUDO = oReader("DATA_ENTREGA_LAUDO")
                    If (Not IsDBNull(oReader("ID_RELATORIO_RECIBO"))) Then registro.RELATORIO_RECIBO = New relatorio_reciboVO
                    If (Not IsDBNull(oReader("CAMPO_ENTREGA_LAUDO"))) Then registro.CAMPO_ENTREGA_LAUDO = oReader("CAMPO_ENTREGA_LAUDO")
                    If (Not IsDBNull(oReader("DATA_ALTERACAO"))) Then registro.DATA_ALTERACAO = oReader("DATA_ALTERACAO")
                    If (Not IsDBNull(oReader("MATERIALRECIBO"))) Then registro.MATERIAL_RECIBO = oReader("MATERIALRECIBO")
                    If (Not IsDBNull(oReader("GEROULAUDO"))) Then registro.GEROULAUDO = oReader("GEROULAUDO")
                    If (Not IsDBNull(oReader("NOME_DIRETORIO"))) Then registro.NOME_DIRETORIO = oReader("NOME_DIRETORIO")
                    If (Not IsDBNull(oReader("DATA_CRIACAO"))) Then registro.DATA_CRIACAO = oReader("DATA_CRIACAO")
                    If (Not IsDBNull(oReader("ANULADO"))) Then registro.ANULADO = oReader("ANULADO")
                    If (Not IsDBNull(oReader("ID_RELATORIO_PA"))) Then registro.ID_RELATORIO_PA = oReader("ID_RELATORIO_PA")
                    If (Not IsDBNull(oReader("REFERENCIA"))) Then registro.REFERENCIA = oReader("REFERENCIA")
                    Exit While
                End While
            End If
        Catch ex As Exception
            Throw ex
        Finally
            objConn.fechaConexao()
        End Try
        Return registro
    End Function



    Public Function getRegistro(ByVal NUM_REGISTRO As Integer, ByVal ano As Integer, ByVal id_natureza As Integer) As registroVO

        Dim objConn As New conexao
        registro = New registroVO
        sql.Clear()
        sql.Append("SELECT *FROM municipios INNER JOIN (tipo_pericia INNER JOIN (secao INNER JOIN ((departamento INNER JOIN regional ON departamento.id_departamento = regional.id_departamento) INNER JOIN (natureza INNER JOIN (destino INNER JOIN (autoridade INNER JOIN (usuario INNER JOIN registro ON (usuario.id_usuario = registro.id_usuario) AND (usuario.id_usuario = registro.responsavel_registro)) ON autoridade.id_autoridade = registro.id_autoridade) ON destino.id_destino = registro.id_destino) ON natureza.id_natureza = registro.id_natureza) ON regional.id_regional = destino.id_regional) ON (secao.id_secao = usuario.id_secao) AND (secao.id_secao = autoridade.id_secao)) ON tipo_pericia.id_tipo = natureza.id_tipo) ON municipios.id_municipio = registro.id_municipio")
        sql.Append(" WHERE NUM_REGISTRO=@NUM_REGISTRO AND YEAR(DATA_REGISTRO)=@ANO AND NATUREZA.ID_NATUREZA=@ID_NATUREZA")

        Dim oReader As OleDbDataReader

        Try
            Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)
            oComando.Parameters.AddWithValue("@NUM_REGISTRO", NUM_REGISTRO)
            oComando.Parameters.AddWithValue("@ANO", ano)
            oComando.Parameters.AddWithValue("@ID_NATUREZA", id_natureza)
            oReader = oComando.ExecuteReader

            If oReader.HasRows Then

                While oReader.Read

                    If (Not IsDBNull(oReader("ID_REGISTRO"))) Then registro.ID_REGISTRO = oReader("ID_REGISTRO")
                    If (Not IsDBNull(oReader("NUM_REGISTRO"))) Then registro.NUM_REGISTRO = oReader("NUM_REGISTRO")
                    If (Not IsDBNull(oReader("DATA_REGISTRO"))) Then registro.DATA_REGISTRO = oReader("DATA_REGISTRO")
                    If (Not IsDBNull(oReader("REGISTRO.ID_AUTORIDADE"))) Then registro.AUTORIDADE = New autoridadeVO With {.ID_AUTORIDADE = oReader("AUTORIDADE.ID_AUTORIDADE"), .NOME_AUTORIDADE = oReader("NOME_AUTORIDADE"), .PREFIXO = oReader("PREFIXO"), .SECAO = New secaoVO With {.ID_SECAO = oReader("SECAO.ID_SECAO"), .DESC_SECAO = oReader("DESC_SECAO"), .STATUS = oReader("SECAO.STATUS")}, .DATA_CRIACAO = oReader("AUTORIDADE.DATA_CRIACAO"), .STATUS = oReader("AUTORIDADE.STATUS")}
                    If (Not IsDBNull(oReader("REQUISICAO"))) Then registro.REQUISICAO = oReader("REQUISICAO")
                    If (Not IsDBNull(oReader("DATA_ACIONAMENTO"))) Then registro.DATA_ACIONAMENTO = oReader("DATA_ACIONAMENTO")
                    If (Not IsDBNull(oReader("NATUREZA.ID_NATUREZA"))) Then registro.NATUREZA = New naturezaVO With {.ID_NATUREZA = oReader("NATUREZA.ID_NATUREZA"), .DESC_NATUREZA = oReader("DESC_NATUREZA"), .DENOMINACAO_OFICIAL = oReader("DENOMINACAO_OFICIAL"), .TIPO_PERICIA = New tipo_periciaVO With {.ID_TIPO = oReader("TIPO_PERICIA.ID_TIPO"), .DESC_TIPO = oReader("DESC_TIPO"), .STATUS = oReader("TIPO_PERICIA.STATUS"), .PRAZO = oReader("PRAZO")}, .STATUS = oReader("NATUREZA.STATUS"), .PONTOS_ATENDIMENTO = oReader("PONTOS_ATENDIMENTO"), .PONTOS_LAUDO = oReader("PONTOS_LAUDO"), .DESLOCAMENTO = oReader("NATUREZA.DESLOCAMENTO")}
                    If (Not IsDBNull(oReader("ENDERECO"))) Then registro.ENDERECO = oReader("ENDERECO")
                    If (Not IsDBNull(oReader("INVESTIGADO"))) Then registro.INVESTIGADO = oReader("INVESTIGADO")
                    If (Not IsDBNull(oReader("VITIMA"))) Then registro.VITIMA = oReader("VITIMA")
                    If (Not IsDBNull(oReader("PROVAS"))) Then registro.PROVAS = oReader("PROVAS")
                    If (Not IsDBNull(oReader("OBSERVACAO"))) Then registro.OBSERVACAO = oReader("OBSERVACAO")
                    If (Not IsDBNull(oReader("DESTINO.ID_DESTINO"))) Then registro.DESTINO = New destinoVO With {.ID_DESTINO = oReader("DESTINO.ID_DESTINO"), .DESC_DESTINO = oReader("DESC_DESTINO"), .DESC_OFICIAL = oReader("DESC_OFICIAL"), .REGIONAL = New regionalVO With {.ID_REGIONAL = oReader("REGIONAL.ID_REGIONAL"), .NUMERO_REGIONAL = oReader("NUMERO_REGIONAL"), .CIDADE_REGIONAL = oReader("CIDADE_REGIONAL"), .DEPARTAMENTO = New departamentoVO With {.ID_DEPARTAMENTO = oReader("DEPARTAMENTO.ID_DEPARTAMENTO"), .NUMERO_DEPARTAMENTO = oReader("NUMERO_DEPARTAMENTO"), .CIDADE_DEPARTAMENTO = oReader("CIDADE_DEPARTAMENTO"), .STATUS = oReader("DEPARTAMENTO.STATUS")}, .STATUS = oReader("REGIONAL.STATUS")}}
                    If (Not IsDBNull(oReader("MUNICIPIOS.ID_MUNICIPIO"))) Then registro.MUNICIPIO = New municipioVO With {.ID_MUNICIPIO = oReader("MUNICIPIOS.ID_MUNICIPIO"), .DESC_MUNICIPIO = oReader("DESC_MUNICIPIO")}
                    If (Not IsDBNull(oReader("REGISTRO.DESLOCAMENTO"))) Then registro.DESLOCAMENTO = (oReader("REGISTRO.DESLOCAMENTO"))
                    If (Not IsDBNull(oReader("RESPONSAVEL_REGISTRO"))) Then registro.RESPONSAVEL_REGISTRO = New usuarioVO With {.ID_USUARIO = oReader("USUARIO.ID_USUARIO")}
                    If (Not IsDBNull(oReader("USUARIO.ID_USUARIO"))) Then registro.USUARIO = New usuarioVO With {.ID_USUARIO = oReader("USUARIO.ID_USUARIO"), .NOME = oReader("NOME"), .SENHA = oReader("SENHA"), .MASP = oReader("MASP"), .SECAO = New secaoVO With {.ID_SECAO = oReader("SECAO.ID_SECAO"), .DESC_SECAO = oReader("DESC_SECAO"), .STATUS = oReader("SECAO.STATUS")}, .CARGO = New cargoVO, .STATUS = oReader("USUARIO.STATUS"), .TIPO_USUARIO = New tipo_usuarioVO, .ALTERACAO = IIf(Not IsDBNull(oReader("ALTERACAO")), oReader("ALTERACAO"), Nothing)}
                    If (Not IsDBNull(oReader("USUARIO_DESIGNADO"))) Then registro.USUARIO_DESIGNADO = (oReader("USUARIO_DESIGNADO"))
                    If (Not IsDBNull(oReader("DATA_REQUISICAO_LAUDO"))) Then registro.DATA_REQUISICAO_LAUDO = oReader("DATA_REQUISICAO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_PRAZO_LAUDO"))) Then registro.DATA_PRAZO_LAUDO = oReader("DATA_PRAZO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_CONCLUSAO_LAUDO"))) Then registro.DATA_CONCLUSAO_LAUDO = oReader("DATA_CONCLUSAO_LAUDO")
                    If (Not IsDBNull(oReader("DATA_ENTREGA_LAUDO"))) Then registro.DATA_ENTREGA_LAUDO = oReader("DATA_ENTREGA_LAUDO")
                    If (Not IsDBNull(oReader("ID_RELATORIO_RECIBO"))) Then registro.RELATORIO_RECIBO = New relatorio_reciboVO
                    If (Not IsDBNull(oReader("CAMPO_ENTREGA_LAUDO"))) Then registro.CAMPO_ENTREGA_LAUDO = oReader("CAMPO_ENTREGA_LAUDO")
                    If (Not IsDBNull(oReader("DATA_ALTERACAO"))) Then registro.DATA_ALTERACAO = oReader("DATA_ALTERACAO")
                    If (Not IsDBNull(oReader("MATERIALRECIBO"))) Then registro.MATERIAL_RECIBO = oReader("MATERIALRECIBO")
                    If (Not IsDBNull(oReader("GEROULAUDO"))) Then registro.GEROULAUDO = oReader("GEROULAUDO")
                    If (Not IsDBNull(oReader("NOME_DIRETORIO"))) Then registro.NOME_DIRETORIO = oReader("NOME_DIRETORIO")
                    If (Not IsDBNull(oReader("REGISTRO.DATA_CRIACAO"))) Then registro.DATA_CRIACAO = oReader("REGISTRO.DATA_CRIACAO")
                    If (Not IsDBNull(oReader("ANULADO"))) Then registro.ANULADO = oReader("ANULADO")
                    If (Not IsDBNull(oReader("ID_RELATORIO_PA"))) Then registro.ID_RELATORIO_PA = oReader("ID_RELATORIO_PA")
                    If (Not IsDBNull(oReader("REFERENCIA"))) Then registro.REFERENCIA = oReader("REFERENCIA")
                    Exit While

                End While

            End If



        Catch ex As Exception

            Throw ex

        Finally

            objConn.fechaConexao()

        End Try

        Return registro

    End Function

    Public Function getUltimoRegistro() As Integer

        Dim objConn As New conexao
        Dim ultimo As Integer = Nothing
        Dim data As DateTime = Now.Date
        Dim ano As Integer = Now.Date.Year

        Try

            sql.Clear()
            sql.Append("SELECT MAX(NUM_REGISTRO) FROM (SELECT NUM_REGISTRO,DATA_REGISTRO FROM REGISTRO WHERE YEAR(DATA_REGISTRO)=@ANO ORDER BY NUM_REGISTRO DESC)")
            Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)
            oComando.Parameters.AddWithValue("@ANO", ano)
            '   If IsDBNull(oComando.ExecuteScalar) And data = CType("01/01/2014", DateTime) Then
            If IsDBNull(oComando.ExecuteScalar) Then
                ultimo = 1
            Else
                ultimo = oComando.ExecuteScalar + 1
            End If
            oComando.ExecuteNonQuery()
            objConn.fechaConexao()
        Catch ex As Exception
            Throw ex
        End Try
        Return ultimo

    End Function

    Public Function insereRegistro(ByVal regInserido As registroVO, Optional ByVal ehLaudoGeral As Boolean = False) As Integer

        Dim numReg As Integer = 0
        Dim objConn As New conexao
        Dim myConnection As OleDbConnection = objConn.abreConexao
        Dim myCommand As OleDbCommand = myConnection.CreateCommand()
        Dim myTrans As OleDbTransaction
        ' Start a local transaction
        myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted)
        ' Assign transaction object for a pending local transaction
        myCommand.Connection = myConnection
        myCommand.Transaction = myTrans
        sql.Clear()

        'sql.Append("INSERT INTO REGISTRO (NUM_REGISTRO,DATA_REGISTRO,ID_AUTORIDADE,REQUISICAO,DATA_ACIONAMENTO,ID_NATUREZA,ENDERECO,INVESTIGADO,VITIMA,PROVAS,OBSERVACAO,ID_DESTINO,ID_MUNICIPIO,DESLOCAMENTO,RESPONSAVEL_REGISTRO,ID_USUARIO,USUARIO_DESIGNADO,DATA_REQUISICAO_LAUDO,DATA_PRAZO_LAUDO,DATA_CONCLUSAO_LAUDO,GEROULAUDO,NOME_DIRETORIO,DATA_CRIACAO,DATA_ENTREGA_LAUDO,MATERIALRECIBO,ID_RELATORIO_PA,REFERENCIA)")
        'sql.Append(" VALUES ")
        'sql.Append("(@NUM_REGISTRO,@DATA_REGISTRO,@ID_AUTORIDADE,@REQUISICAO,@DATA_ACIONAMENTO, @ID_NATUREZA,@ENDERECO,@INVESTIGADO,@VITIMA,@PROVAS,@OBSERVACAO,@ID_DESTINO,@ID_MUNICIPIO,@DESLOCAMENTO,@RESPONSAVEL_REGISTRO, @ID_USUARIO,@USUARIO_DESIGNADO,@DATA_REQUISICAO_LAUDO,@DATA_PRAZO_LAUDO,@DATA_CONCLUSAO_LAUDO,@GEROULAUDO,@NOME_DIRETORIO,@DATA_CRIACAO,@DATA_ENTREGA_LAUDO,@MATERIALRECIBO,@ID_RELATORIO_PA,@REFERENCIA)")


        sql.Append("INSERT INTO REGISTRO (NUM_REGISTRO,DATA_REGISTRO,ID_AUTORIDADE,REQUISICAO,DATA_ACIONAMENTO,ID_NATUREZA,ENDERECO,INVESTIGADO,VITIMA,PROVAS,OBSERVACAO,ID_DESTINO,ID_MUNICIPIO,DESLOCAMENTO,RESPONSAVEL_REGISTRO,ID_USUARIO,USUARIO_DESIGNADO,DATA_REQUISICAO_LAUDO,DATA_PRAZO_LAUDO,DATA_CONCLUSAO_LAUDO,GEROULAUDO,NOME_DIRETORIO,DATA_CRIACAO,DATA_ENTREGA_LAUDO,MATERIALRECIBO,REFERENCIA)")
        sql.Append(" VALUES ")
        sql.Append("(@NUM_REGISTRO,@DATA_REGISTRO,@ID_AUTORIDADE,@REQUISICAO,@DATA_ACIONAMENTO, @ID_NATUREZA,@ENDERECO,@INVESTIGADO,@VITIMA,@PROVAS,@OBSERVACAO,@ID_DESTINO,@ID_MUNICIPIO,@DESLOCAMENTO,@RESPONSAVEL_REGISTRO, @ID_USUARIO,@USUARIO_DESIGNADO,@DATA_REQUISICAO_LAUDO,@DATA_PRAZO_LAUDO,@DATA_CONCLUSAO_LAUDO,@GEROULAUDO,@NOME_DIRETORIO,@DATA_CRIACAO,@DATA_ENTREGA_LAUDO,@MATERIALRECIBO,@REFERENCIA)")



        Try
            myCommand.CommandText = sql.ToString
            With regInserido
                myCommand.Parameters.AddWithValue("@NUM_REGISTRO", .NUM_REGISTRO)
                'oComando.Parameters.AddWithValue("@DATA_REGISTRO", .DATA_REGISTRO)
                myCommand.Parameters.AddWithValue("@DATA_REGISTRO", DateTime.Parse(.DATA_REGISTRO))
                myCommand.Parameters.AddWithValue("@ID_AUTORIDADE", .AUTORIDADE.ID_AUTORIDADE)
                myCommand.Parameters.AddWithValue("@REQUISICAO", .REQUISICAO)
                myCommand.Parameters.AddWithValue("@DATA_ACIONAMENTO", .DATA_ACIONAMENTO)
                myCommand.Parameters.AddWithValue("@ID_NATUREZA", .NATUREZA.ID_NATUREZA)
                myCommand.Parameters.AddWithValue("@ENDERECO", .ENDERECO)
                myCommand.Parameters.AddWithValue("@INVESTIGADO", .INVESTIGADO)
                myCommand.Parameters.AddWithValue("@VITIMA", .VITIMA)
                myCommand.Parameters.AddWithValue("@PROVAS", .PROVAS)
                myCommand.Parameters.AddWithValue("@OBSERVACAO", .OBSERVACAO)
                myCommand.Parameters.AddWithValue("@ID_DESTINO", .DESTINO.ID_DESTINO)
                myCommand.Parameters.AddWithValue("@ID_MUNICIPIO", .MUNICIPIO.ID_MUNICIPIO)
                myCommand.Parameters.AddWithValue("@DESLOCAMENTO", .DESLOCAMENTO)
                myCommand.Parameters.AddWithValue("@RESPONSAVEL_REGISTRO", .RESPONSAVEL_REGISTRO.ID_USUARIO)
                myCommand.Parameters.AddWithValue("@ID_USUARIO", .USUARIO.ID_USUARIO)
                myCommand.Parameters.AddWithValue("@USUARIO_DESIGNADO", .USUARIO_DESIGNADO)
                myCommand.Parameters.AddWithValue("@DATA_REQUISICAO_LAUDO", .DATA_REQUISICAO_LAUDO)
                myCommand.Parameters.AddWithValue("@DATA_PRAZO_LAUDO", .DATA_PRAZO_LAUDO)
                If ehLaudoGeral Then
                    myCommand.Parameters.AddWithValue("@DATA_CONCLUSAO_LAUDO", DBNull.Value)
                Else
                    myCommand.Parameters.AddWithValue("@DATA_CONCLUSAO_LAUDO", DateTime.Parse(.DATA_CONCLUSAO_LAUDO))
                End If

                myCommand.Parameters.AddWithValue("@GEROULAUDO", .GEROULAUDO)
                myCommand.Parameters.AddWithValue("@NOME_DIRETORIO", .NOME_DIRETORIO)
                myCommand.Parameters.AddWithValue("@DATA_CRIACAO", DateTime.Parse(.DATA_CRIACAO))

                If Not IsNothing(regInserido.DATA_ENTREGA_LAUDO) Then
                    myCommand.Parameters.AddWithValue("@DATA_ENTREGA_LAUDO", DateTime.Parse(.DATA_ENTREGA_LAUDO))
                Else
                    myCommand.Parameters.AddWithValue("@DATA_ENTREGA_LAUDO", DBNull.Value)
                End If
                myCommand.Parameters.AddWithValue("@MATERIALRECIBO", .PROVAS)
                'myCommand.Parameters.AddWithValue("@ID_RELATORIO_PA", .ID_RELATORIO_PA)
                myCommand.Parameters.AddWithValue("@REFERENCIA", .REFERENCIA)
                myCommand.ExecuteNonQuery()
                myCommand.Parameters.Clear()
                myTrans.Commit()
            End With
        Catch ex As Exception
            Throw ex
        Finally
            objConn.fechaConexao()
        End Try
        Return regInserido.NUM_REGISTRO
    End Function

    Public Sub deleteRegistro(ByVal regInserido As registroVO, Optional ByVal ehNovo As Boolean = False, _
                              Optional ByVal uc As ucPreambulo = Nothing, _
                               Optional ByVal erro As Integer = 0, _
                                  Optional ByVal armaRelatorio As armaRelatorioVO = Nothing, _
                                  Optional ByVal drogaRelatorio As List(Of drogaRelatorioVO) = Nothing)


        Dim objConn As New conexao

        Dim myConnection As OleDbConnection = objConn.abreConexao

        'myConnection.Open()

        Dim myCommand As OleDbCommand = myConnection.CreateCommand()

        Dim myTrans As OleDbTransaction

        ' Start a local transaction
        myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted)
        ' Assign transaction object for a pending local transaction
        myCommand.Connection = myConnection
        myCommand.Transaction = myTrans

        Try

            If regInserido.NATUREZA.ID_NATUREZA = 88 Or regInserido.NATUREZA.ID_NATUREZA = 52 Then


                myCommand.CommandText = "DELETE FROM ITENS_AVALIACAO WHERE NUM_REGISTRO=@NUM_REGISTRO AND ANO_REGISTRO=YEAR(@ANO_REGISTRO)"
                myCommand.Parameters.AddWithValue("@NUM_REGISTRO", regInserido.NUM_REGISTRO)
                myCommand.Parameters.AddWithValue("@ANO_REGISTRO", regInserido.DATA_REGISTRO)
                myCommand.ExecuteNonQuery()
                myCommand.Parameters.Clear()

            End If

            If ehNovo Then

                myCommand.CommandText = "DELETE FROM PONTUACAO WHERE ID_REGISTRO=@ID_REGISTRO"
                myCommand.Parameters.AddWithValue("@ID_REGISTRO", regInserido.ID_REGISTRO)
                myCommand.ExecuteNonQuery()
                myCommand.Parameters.Clear()

                myCommand.CommandText = "DELETE FROM REGISTRO WHERE ID_REGISTRO=@ID_REGISTRO"
                myCommand.Parameters.AddWithValue("@ID_REGISTRO", regInserido.ID_REGISTRO)
                myCommand.ExecuteNonQuery()
                myCommand.Parameters.Clear()

                '-------------------------------------------------------------
                ' RETORNA ESTADO ORGINAL CASO O REGISTRO SEJA INSERIDO PELO REGISTROPERICIAL
                '-----------------------------------------------------------
            Else

                myCommand.CommandText = "UPDATE PONTUACAO SET ID_USUARIO=@ID_USUARIO, DATA_ALTERACAO=@DATA_ALTERACAO WHERE ID_REGISTRO=@ID_REGISTRO"
                myCommand.Parameters.AddWithValue("@ID_USUARIO", regInserido.USUARIO.ID_USUARIO)
                myCommand.Parameters.AddWithValue("@DATA_ALTERACAO", DateTime.Parse(regInserido.DATA_ALTERACAO))
                myCommand.Parameters.AddWithValue("@ID_REGISTRO", regInserido.ID_REGISTRO)
                myCommand.ExecuteNonQuery()
                myCommand.Parameters.Clear()

                myCommand.CommandText = "UPDATE REGISTRO SET DATA_CONCLUSAO_LAUDO=@DATA_CONCLUSAO_LAUDO, GEROULAUDO=@GEROULAUDO,NOME_DIRETORIO=@NOME_DIRETORIO,ID_USUARIO=@ID_USUARIO,PROVAS=@PROVAS WHERE ID_REGISTRO=@ID_REGISTRO"
                If Not IsNothing(regInserido.DATA_CONCLUSAO_LAUDO) Then
                    myCommand.Parameters.AddWithValue("@DATA_CONCLUSAO_LAUDO", regInserido.DATA_CONCLUSAO_LAUDO)
                Else
                    myCommand.Parameters.AddWithValue("@DATA_CONCLUSAO_LAUDO", DBNull.Value)
                End If
                myCommand.Parameters.AddWithValue("@GEROULAUDO", DBNull.Value)
                myCommand.Parameters.AddWithValue("@NOME_DIRETORIO", DBNull.Value)
                myCommand.Parameters.AddWithValue("@ID_USUARIO", regInserido.USUARIO.ID_USUARIO)
                myCommand.Parameters.AddWithValue("@PROVAS", regInserido.PROVAS)
                myCommand.Parameters.AddWithValue("@ID_REGISTRO", regInserido.ID_REGISTRO)
                myCommand.ExecuteNonQuery()
                myCommand.Parameters.Clear()


            End If

            If Not IsNothing(armaRelatorio) Then
                myCommand.Parameters.Clear()
                myCommand.CommandText = "DELETE FROM ARMA_RELATORIO WHERE ID_REGISTRO=@ID_REGISTRO"
                myCommand.Parameters.AddWithValue("@ID_REGISTRO", armaRelatorio.ID_REGISTRO)
                myCommand.ExecuteNonQuery()
                myCommand.Parameters.Clear()

            End If

            If Not IsNothing(drogaRelatorio) Then
                For Each droga In drogaRelatorio
                    myCommand.Parameters.Clear()
                    myCommand.CommandText = "DELETE FROM DROGA_RELATORIO WHERE ID_DROGA=@ID_DROGA"
                    myCommand.Parameters.AddWithValue("@ID_DROGA", droga.ID_DROGA)
                    myCommand.ExecuteNonQuery()
                    myCommand.Parameters.Clear()
                Next
            End If

            myTrans.Commit()
        Catch e As Exception
            Try
                myTrans.Rollback()
            Catch ex As OleDbException
                If Not myTrans.Connection Is Nothing Then
                    Console.WriteLine("Uma exceção do tipo " & ex.GetType().ToString() & _
                                      " ocorreu ao tentar realizar o rollback da aplicação")
                End If
                Throw ex
            End Try


        Finally
            objConn.fechaConexao()
        End Try
    End Sub

    Public Sub deleteRegistroPontuacao(ByVal regInserido As registroVO)

        Dim objConn As New conexao

        Dim myConnection As OleDbConnection = objConn.abreConexao

        'myConnection.Open()

        Dim myCommand As OleDbCommand = myConnection.CreateCommand()

        Dim myTrans As OleDbTransaction

        ' Start a local transaction
        myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted)
        ' Assign transaction object for a pending local transaction
        myCommand.Connection = myConnection
        myCommand.Transaction = myTrans

        Try
            myCommand.CommandText = "DELETE FROM PONTUACAO WHERE ID_REGISTRO=@ID_REGISTRO"
            myCommand.Parameters.AddWithValue("@ID_REGISTRO", regInserido.ID_REGISTRO)
            myCommand.ExecuteNonQuery()
            myCommand.CommandText = "DELETE FROM REGISTRO WHERE ID_REGISTRO=@ID_REGISTRO"
            myCommand.Parameters.AddWithValue("@ID_REGISTRO", regInserido.ID_REGISTRO)
            myCommand.ExecuteNonQuery()
            myTrans.Commit()
            Console.WriteLine("ARQUIVOS EXCLUIDOS COM SUCESSO DA BASE DE DADOS")
        Catch e As Exception
            Try
                myTrans.Rollback()
            Catch ex As OleDbException
                If Not myTrans.Connection Is Nothing Then
                    Console.WriteLine("Uma exceção do tipo " & ex.GetType().ToString() & _
                                      " ocorreu ao tentar realizar o rollback da aplicação")
                End If
                Throw ex
            End Try


        Finally
            objConn.fechaConexao()
        End Try
    End Sub
   
    Public Function updateRegistro(ByVal registro As registroVO, _
                                   Optional ByVal PROVAS As String = Nothing, _
                                   Optional ByVal id_usuario As Integer = 0, _
                                   Optional ByVal nomeDiretorio As String = Nothing, _
                                   Optional ByVal uc As ucPreambulo = Nothing) As Integer

        Dim numReg As Integer = 0
        Dim objConn As New conexao
        Dim DIR As String = System.Configuration.ConfigurationManager.AppSettings("dirLaudosWord") & "\" & nomeDiretorio & "\" & nomeDiretorio & ".DOC"
        Dim provasComplementar As String = Nothing
        sql.Clear()

        Try

            If registro.USUARIO.ID_USUARIO <> id_usuario Then
                sql.Append("UPDATE REGISTRO SET DATA_CONCLUSAO_LAUDO='").Append(DateTime.Parse(Now)).Append("'").Append(", GEROULAUDO=").Append(1).Append(",NOME_DIRETORIO='").Append(DIR).Append("',ID_USUARIO=").Append(id_usuario)
            Else
                sql.Append("UPDATE REGISTRO SET DATA_CONCLUSAO_LAUDO='").Append(DateTime.Parse(Now)).Append("'").Append(", GEROULAUDO=").Append(1).Append(",NOME_DIRETORIO='").Append(DIR).Append("',ID_USUARIO=").Append(id_usuario)
            End If

            If Not IsNothing(PROVAS) Then
                'provasComplementar = registro.PROVAS & " " & PROVAS
                provasComplementar = PROVAS
            End If

            '--------------------------------------------------------------------------------
            ' REDUZ O TAMANHO DO CAMPO CASO EXCEDA O LIMITE DO BANCO DE DADOS NO CAMPO PROVAS
            '--------------------------------------------------------------------------------
            If Not IsNothing(provasComplementar) Then
                If provasComplementar.ToString.Length > 255 Then
                    provasComplementar = provasComplementar.ToString.Substring(0, 255)
                End If

                sql.Append(",PROVAS='").Append(provasComplementar).Append("'")
                sql.Append(",MATERIALRECIBO='").Append(provasComplementar).Append("'")
            End If

            'If uc.atualizaDataEntrega Then
            '    sql.Append(",DATA_ENTREGA_LAUDO='").Append(DateTime.Parse(Now)).Append("'")
            'End If




            sql.Append(" WHERE NUM_REGISTRO=").Append(registro.NUM_REGISTRO).Append(" AND YEAR(DATA_REGISTRO)=").Append(CType(registro.DATA_REGISTRO, DateTime).Year)
            '-----------------------------------------------------------------------------------------
            ' ERRO QUANDO USA OLEDBPARAMETER - PESQUISAR SOLUÇÃO E IMPLEMENTAR DEPOIS
            '-----------------------------------------------------------------------------------------

            Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)
            i = oComando.ExecuteNonQuery

            '-----------------------------------------------------------------------------------------
            ' LIMPA OS PARAMETROS DA QUERY ANTERIOR
            '-----------------------------------------------------------------------------------------

        Catch ex As Exception
            Throw ex
        Finally
            objConn.fechaConexao()
        End Try
        Return registro.NUM_REGISTRO
    End Function


    ''' <summary>
    ''' Exibe todos os registros do usuário logado com data_prazo_laudo maior que data atual do sistema
    ''' </summary>
    ''' 
    Public Function getRegistros(ByVal txtBusca As String) As DataTable

        Dim tabela As New DataTable
        Dim da As New OleDbDataAdapter
        Dim objConn As New conexao

        Try


            sql.Clear()
            'sql.Append("SELECT REGISTRO.*, AUTORIDADE.*, DESTINO.*, REGIONAL.*, NATUREZA.*, USUARIO.*, dateDiff('d',DATA_PRAZO_LAUDO,now()) AS ATRASO FROM usuario INNER JOIN (natureza INNER JOIN ((regional INNER JOIN destino ON regional.id_regional=destino.id_regional) INNER JOIN (autoridade INNER JOIN registro ON autoridade.id_autoridade=registro.id_autoridade) ON destino.id_destino=registro.id_destino) ON natureza.id_natureza=registro.id_natureza) ON (usuario.id_usuario=registro.responsavel_registro) AND (usuario.id_usuario=registro.id_usuario) ")
            'sql.Append(" where ")

            'sql.Append("SELECT *FROM usuario INNER JOIN (natureza INNER JOIN (destino INNER JOIN (autoridade INNER JOIN registro ON autoridade.id_autoridade = registro.id_autoridade) ON destino.id_destino = registro.id_destino) ON natureza.id_natureza = registro.id_natureza) ON usuario.id_usuario = registro.id_usuario")
            sql.Append("SELECT *FROM tipo_pericia INNER JOIN (usuario INNER JOIN (natureza INNER JOIN (destino INNER JOIN (autoridade INNER JOIN registro ON autoridade.id_autoridade = registro.id_autoridade) ON destino.id_destino = registro.id_destino) ON natureza.id_natureza = registro.id_natureza) ON usuario.id_usuario = registro.id_usuario) ON tipo_pericia.id_tipo = natureza.id_tipo")
            sql.Append(" WHERE (")

            If Not IsNothing(txtBusca) Then

                With sql

                    If IsNumeric(txtBusca) And txtBusca.IndexOf(".") = 0 Then

                        .Append(" NUM_REGISTRO=@NUM_REGISTRO")

                    ElseIf IsDate(txtBusca) Then

                        '-----------------------------------------------------------------------------------------
                        ' VERIFICA SE O FILTRO DE BUSCA É UMA DATA VÁLIDA
                        '-----------------------------------------------------------------------------------------

                        .Append("  DATA_REGISTRO = @DATA_REGISTRO ")
                        .Append(" OR DATA_ACIONAMENTO = @DATA_ACIONAMENTO ")
                        .Append(" OR DATA_ENTREGA_LAUDO = @DATA_ENTREGA_LAUDO ")
                        .Append(" OR DATA_CONCLUSAO_LAUDO = @DATA_CONCLUSAO_LAUDO ")

                    Else

                        .Append(" REQUISICAO like @REQUISICAO ")
                        .Append(" OR NOME_AUTORIDADE like @NOME_AUTORIDADE ")
                        .Append(" OR NATUREZA.DESC_NATUREZA like @DESC_NATUREZA ")
                        .Append(" OR ENDERECO like @ENDERECO ")
                        .Append(" OR VITIMA like @VITIMA ")
                        .Append(" OR INVESTIGADO like @INVESTIGADO ")
                        .Append(" OR PROVAS like @PROVAS ")
                        .Append(" OR OBSERVACAO like @OBSERVACAO ")
                        .Append(" OR DESTINO.DESC_DESTINO like @DESTINO ")
                        .Append(" OR USUARIO.NOME like @PERITO ")
                        .Append(" OR PROVAS like @PROVAS ")
                        .Append(" OR OBSERVACAO like @OBSERVACAO ")
                        .Append(" OR REFERENCIA like @REFERENCIA ")
                    End If
                    .Append(")")
                    .Append(" AND ANULADO = FALSE ")
                End With

            End If

            sql.Append(" ORDER BY ID_REGISTRO DESC ")

            da = New OleDbDataAdapter(sql.ToString, objConn.abreConexao)
            '---------------------------------------------------------------------------
            ' ADICIONA PARAMETROS DE ACORDO COM FILTRO DA PESQUISA REPASSADO
            '---------------------------------------------------------------------------

            ' da.SelectCommand.Parameters.AddWithValue("@ID_USUARIO", id_usuario)

            If Not IsNothing(txtBusca) Then

                If IsNumeric(txtBusca) Then da.SelectCommand.Parameters.AddWithValue("@NUM_REGISTRO", txtBusca)
                If IsDate(txtBusca) Then da.SelectCommand.Parameters.AddWithValue("@DATA_REGISTRO", txtBusca)
                If IsDate(txtBusca) Then da.SelectCommand.Parameters.AddWithValue("@DATA_ACIONAMENTO", txtBusca)
                If IsDate(txtBusca) Then da.SelectCommand.Parameters.AddWithValue("@DATA_ENTREGA_LAUDO", txtBusca)
                If IsDate(txtBusca) Then da.SelectCommand.Parameters.AddWithValue("@DATA_CONCLUSAO_LAUDO", txtBusca)
                da.SelectCommand.Parameters.AddWithValue("@REQUISICAO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@NOME_AUTORIDADE", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@DESC_NATUREZA", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@ENDERECO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@VITIMA", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@INVESTIGADO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@PROVAS", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@OBSERVACAO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@DESTINO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@PERITO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@PROVAS", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@OBSERVACAO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@REFERENCIA", "%" & txtBusca & "%")
            End If


            da.Fill(ds, "registros")

            tabela = ds.Tables("registros")

        Catch ex As Exception
            Throw ex
        Finally
            objConn.fechaConexao()
        End Try

        Return tabela

    End Function


    ''' <summary>
    ''' Exibe todos os registros de uma determinada seção
    ''' </summary>
    ''' <param name="id_secao">id_secao é o ID da seção passada como referência</param>
    ''' 
    Public Function getLaudosSecao(ByVal id_secao As Integer, Optional ByVal txtbusca As String = Nothing) As DataTable

        Dim tabela As New DataTable
        Dim da As New OleDbDataAdapter
        Dim objConn As New conexao

        Try

            sql.Clear()
            sql.Append("SELECT *FROM secao INNER JOIN (usuario INNER JOIN (natureza INNER JOIN (destino INNER JOIN (autoridade INNER JOIN registro ON autoridade.id_autoridade = registro.id_autoridade) ON destino.id_destino = registro.id_destino) ON natureza.id_natureza = registro.id_natureza) ON usuario.id_usuario = registro.id_usuario) ON (secao.id_secao = usuario.id_secao) AND (secao.id_secao = autoridade.id_secao)")
            sql.Append(" where SECAO.ID_SECAO=@ID_SECAO")


            If Not IsNothing(txtbusca) Then

                With sql

                    If IsNumeric(txtbusca) Then

                        .Append(" OR NUM_REGISTRO=@NUM_REGISTRO")

                    End If

                    '-----------------------------------------------------------------------------------------
                    ' VERIFICA SE O FILTRO DE BUSCA É UMA DATA VÁLIDA
                    '-----------------------------------------------------------------------------------------

                    If IsDate(txtbusca) Then

                        .Append(" OR DATA_REGISTRO = @DATA_REGISTRO ")
                        .Append(" OR DATA_ACIONAMENTO = @DATA_ACIONAMENTO ")

                    End If

                    .Append(" OR REQUISICAO like @REQUISICAO ")
                    .Append(" OR NOME_AUTORIDADE like @NOME_AUTORIDADE ")
                    .Append(" OR DESC_NATUREZA like @DESC_NATUREZA ")
                    .Append(" OR ENDERECO like @ENDERECO ")
                    .Append(" OR VITIMA like @VITIMA ")
                    .Append(" OR PROVAS like @PROVAS ")
                    .Append(" OR OBSERVACAO like @OBSERVACAO ")
                    .Append(" OR DESC_DESTINO like @DESTINO ")
                    .Append(" OR NOME like @PERITO ")
                    .Append(" OR REFERENCIA like @REFERENCIA ")
                End With

            End If

            sql.Append(" ORDER BY NUM_REGISTRO DESC")

            da = New OleDbDataAdapter(sql.ToString, objConn.abreConexao)
            '---------------------------------------------------------------------------
            ' ADICIONA PARAMETROS DE ACORDO COM FILTRO DA PESQUISA REPASSADO
            '---------------------------------------------------------------------------

            da.SelectCommand.Parameters.AddWithValue("@ID_SECAO", id_secao)

            If Not IsNothing(txtbusca) Then

                If IsNumeric(txtbusca) Then da.SelectCommand.Parameters.AddWithValue("@NUM_REGISTRO", txtbusca)
                If IsDate(txtbusca) Then da.SelectCommand.Parameters.AddWithValue("@DATA_REGISTRO", txtbusca)
                If IsDate(txtbusca) Then da.SelectCommand.Parameters.AddWithValue("@DATA_ACIONAMENTO", txtbusca)
                da.SelectCommand.Parameters.AddWithValue("@REQUISICAO", "%" & txtbusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@NOME_AUTORIDADE", "%" & txtbusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@DESC_NATUREZA", "%" & txtbusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@ENDERECO", "%" & txtbusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@VITIMA", "%" & txtbusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@PROVAS", "%" & txtbusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@OBSERVACAO", "%" & txtbusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@DESTINO", "%" & txtbusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@PERITO", "%" & txtbusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@REFERENCIA", "%" & txtbusca & "%")

            End If


            da.Fill(ds, "registros")

            tabela = ds.Tables("registros")

            Return tabela

        Catch ex As Exception

            Throw ex

        Finally

            objConn.fechaConexao()

        End Try

    End Function


    ''' <summary>
    ''' Exibe todos os registros do usuário logado com data_prazo_laudo maior que data atual do sistema
    ''' </summary>
    ''' <param name="id_usuario">id_usuario é o ID do usuário logado no sistema</param>
    ''' 
    Public Function getRegistrosComAtraso(ByVal id_usuario As Integer, Optional ByVal txtBusca As String = Nothing) As DataTable

        Dim tabela As New DataTable
        Dim da As New OleDbDataAdapter
        Dim objConn As New conexao

        Try


            sql.Clear()
            sql.Append("SELECT REGISTRO.*, AUTORIDADE.*, DESTINO.*, REGIONAL.*, NATUREZA.*, USUARIO.*, dateDiff('d',DATA_PRAZO_LAUDO,now()) AS ATRASO FROM usuario INNER JOIN (natureza INNER JOIN ((regional INNER JOIN destino ON regional.id_regional=destino.id_regional) INNER JOIN (autoridade INNER JOIN registro ON autoridade.id_autoridade=registro.id_autoridade) ON destino.id_destino=registro.id_destino) ON natureza.id_natureza=registro.id_natureza) ON (usuario.id_usuario=registro.responsavel_registro) AND (usuario.id_usuario=registro.id_usuario)")
            sql.Append(" where NOW()>DATA_PRAZO_LAUDO")
            sql.Append(" AND USUARIO.ID_USUARIO = @ID_USUARIO")


            If Not IsNothing(txtBusca) Then

                With sql

                    If IsNumeric(txtBusca) Then

                        .Append(" OR NUM_REGISTRO=@NUM_REGISTRO")

                    End If

                    '-----------------------------------------------------------------------------------------
                    ' VERIFICA SE O FILTRO DE BUSCA É UMA DATA VÁLIDA
                    '-----------------------------------------------------------------------------------------

                    If IsDate(txtBusca) Then

                        .Append(" OR DATA_REGISTRO = @DATA_REGISTRO ")
                        .Append(" OR DATA_ACIONAMENTO = @DATA_ACIONAMENTO ")

                    End If

                    .Append(" OR REQUISICAO like @REQUISICAO ")
                    .Append(" OR NOME_AUTORIDADE like @NOME_AUTORIDADE ")
                    .Append(" OR NATUREZA.DESC_NATUREZA like @DESC_NATUREZA ")
                    .Append(" OR ENDERECO like @ENDERECO ")
                    .Append(" OR VITIMA like @VITIMA ")
                    .Append(" OR PROVAS like @PROVAS ")
                    .Append(" OR OBSERVACAO like @OBSERVACAO ")
                    .Append(" OR DESTINO.DESC_DESTINO like @DESTINO ")
                    .Append(" OR USUARIO.NOME like @PERITO ")
                    .Append(" OR REFERENCIA like @REFERENCIA ")
                End With

            End If

            sql.Append(" ORDER BY NUM_REGISTRO DESC")

            da = New OleDbDataAdapter(sql.ToString, objConn.abreConexao)
            '---------------------------------------------------------------------------
            ' ADICIONA PARAMETROS DE ACORDO COM FILTRO DA PESQUISA REPASSADO
            '---------------------------------------------------------------------------

            da.SelectCommand.Parameters.AddWithValue("@ID_USUARIO", id_usuario)

            If Not IsNothing(txtBusca) Then

                If IsNumeric(txtBusca) Then da.SelectCommand.Parameters.AddWithValue("@NUM_REGISTRO", txtBusca)
                If IsDate(txtBusca) Then da.SelectCommand.Parameters.AddWithValue("@DATA_REGISTRO", txtBusca)
                If IsDate(txtBusca) Then da.SelectCommand.Parameters.AddWithValue("@DATA_ACIONAMENTO", txtBusca)
                da.SelectCommand.Parameters.AddWithValue("@REQUISICAO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@NOME_AUTORIDADE", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@DESC_NATUREZA", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@ENDERECO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@VITIMA", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@PROVAS", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@OBSERVACAO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@DESTINO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@PERITO", "%" & txtBusca & "%")
                da.SelectCommand.Parameters.AddWithValue("@REFERENCIA", "%" & txtBusca & "%")

            End If


            da.Fill(ds, "registros")

            tabela = ds.Tables("registros")

            Return tabela

        Catch ex As Exception

            Throw ex

        Finally

            objConn.fechaConexao()

        End Try

    End Function
End Class
